/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package paquetevistas;

import controlador.configuracion.controladorconfiguracion;
import controlador.almacen.controladoralmacen;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import java.util.ArrayList;
import java.util.List;

import jxl.*;//Por el Excel 
import java.io.*;//Por el Excel 
import java.io.File;
//import java.text.DateFormat;
import java.util.Date;
import jxl.write.DateFormat;

/**
 *
 * @author mariofcandia
 */
public class CargaMasivaEmpleado extends javax.swing.JInternalFrame {

    /**
     * Creates new form CargaMasivaEmpleado
     */
    
    public static controladorconfiguracion mycontroladorconfiguracion = new controladorconfiguracion();
    
    public CargaMasivaEmpleado() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txtNombreArchivo = new javax.swing.JTextField();
        btnBuscar = new javax.swing.JButton();
        btnCargar = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setClosable(true);
        setIconifiable(true);
        setTitle("Carga de operarios de produccion");
        setPreferredSize(new java.awt.Dimension(393, 198));

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Seleccione archivo"));
        jPanel1.setPreferredSize(new java.awt.Dimension(335, 120));

        jLabel1.setText("Archivo:");

        txtNombreArchivo.setEditable(false);
        txtNombreArchivo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtNombreArchivoActionPerformed(evt);
            }
        });

        btnBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/search.png"))); // NOI18N
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });

        btnCargar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/save.png"))); // NOI18N
        btnCargar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCargarActionPerformed(evt);
            }
        });

        jLabel2.setText("Buscar");

        jLabel3.setText("Guardar");

        org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(txtNombreArchivo, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 147, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jLabel2)
                    .add(btnBuscar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 46, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(btnCargar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 46, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, jLabel3))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel1Layout.createSequentialGroup()
                .add(21, 21, 21)
                .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(btnBuscar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 46, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(btnCargar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 46, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jLabel1)
                        .add(txtNombreArchivo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jLabel2)
                    .add(jLabel3))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(16, 16, 16)
                .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(26, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(14, 14, 14)
                .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(35, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void txtNombreArchivoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtNombreArchivoActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtNombreArchivoActionPerformed

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        // TODO add your handling code here:
        JFileChooser file = new JFileChooser();
        int opcion = file.showOpenDialog(this);
        if (opcion == JFileChooser.APPROVE_OPTION) {
            this.txtNombreArchivo.setText(file.getSelectedFile().getPath());
        }
    }//GEN-LAST:event_btnBuscarActionPerformed

    private void btnCargarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCargarActionPerformed
        // TODO add your handling code here:
        //INICIO: Lee desde Archivo excel
        if ("".equals(txtNombreArchivo.getText())) {
            JOptionPane.showMessageDialog(this, "Ruta de archivo no especificada.");
            return;
        }
        if (JOptionPane.showConfirmDialog(this,
                "¿Está seguro de agregar los Empleados desde " + txtNombreArchivo.getText() + "?", "Carga Masiva de Empleados", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) {
            int fila = 0;
            int col = 0;
            controladoralmacen mycontroladoralmacen = new controladoralmacen();
            try { 
                Workbook archivoExcel = Workbook.getWorkbook(new File(txtNombreArchivo.getText())); 

                    Sheet hoja = archivoExcel.getSheet(0); 
                    int numColumnas = hoja.getColumns(); 
                    int numFilas = hoja.getRows(); 
                    
                    List<modelos.Empleado> empleados = new ArrayList<modelos.Empleado>();
                    List<modelos.Empleado> empleadosexistentes = new ArrayList<modelos.Empleado>();
                    List<Float> desempenos = new ArrayList<Float>();
                    List<Float> desempenosexistentes = new ArrayList<Float>();
                    int existencia;
//                    List<modelos.Desempeno> desempenos = new ArrayList<modelos.Desempeno>();
                    
                    for (fila = 3; fila < numFilas; fila++) { // Recorre cada fila de la hoja    

                            existencia = 0;
                            col = 0;
                            modelos.Empleado empleado = new modelos.Empleado();
//                            modelos.Desempeno desempeno = new modelos.Desempeno();
                            
                            String nombre, appaterno, apmaterno;
                           
                            DateFormat strfechanac, strfechacontrato;
                            DateCell dcfechanac, dcfechacontrato;
                            Date fechanac, fechacontrato;
                            String genero;
                            int dni;
                            float sueldo;
                            String tipo, estado;
                            
                            float pht1, pht2;
                            float mht1, mht2;
                            float pdt1, pdt2;
                            float mdt1, mdt2;
                            float prt1, prt2;
                            float mrt1, mrt2;
                            float pet1, pet2;
                            float met1, met2;
                            
                            int generoid, estadoid;// debido a que los saco como string del excel
                            
                            nombre = hoja.getCell(col++, fila).getContents(); 
                            appaterno = hoja.getCell(col++, fila).getContents(); 
                            apmaterno = hoja.getCell(col++, fila).getContents(); 

                            dcfechanac = (DateCell) hoja.getCell(col++, fila);
                            fechanac = dcfechanac.getDate();
                            dcfechacontrato = (DateCell) hoja.getCell(col++, fila);
                            fechacontrato = dcfechacontrato.getDate();
                            
                            genero = hoja.getCell(col++, fila).getContents(); 
                            dni = Integer.valueOf(hoja.getCell(col++, fila).getContents()); 
                            sueldo = Float.valueOf(hoja.getCell(col++, fila).getContents()); 
                            tipo = hoja.getCell(col++, fila).getContents(); 
                            estado = hoja.getCell(col++, fila).getContents(); 
                            
                            pht1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", ".")); 
                            mht1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", ".")); 
                            pht2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", ".")); 
                            mht2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));                 
                              
                            pdt1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", ".")); 
                            mdt1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));  
                            pdt2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));   
                            mdt2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));  
                             
                            prt1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));
                            mrt1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));  
                            prt2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));   
                            mrt2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));  
                               
                            pet1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));  
                            met1 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));  
                            pet2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));  
                            met2 = Float.valueOf((hoja.getCell(col++, fila).getContents()).replace(",", "."));                
                             
                            if(genero.equalsIgnoreCase("Masculino")){generoid=0;}
                            else generoid=1;
                            if(estado.equalsIgnoreCase("Activo")){estadoid=1;}
                            else estadoid=0;
                            
                            modelos.Tipoempleado tipoempleado = mycontroladorconfiguracion.sacaidtipo(tipo);
                            
                            empleado.setNombre(nombre);
                            empleado.setAppaterno(appaterno);
                            empleado.setApmaterno(apmaterno);
                            empleado.setFechanacimiento(fechanac);
                            empleado.setFechacontrato(fechacontrato);
                            empleado.setGenero(generoid);
                            empleado.setSueldo(sueldo);
                            empleado.setDni(dni);
                            empleado.setTipoempleado(tipoempleado);
                            empleado.setEstado(estadoid);
                            
//                            empleados.add(empleado);
                            existencia = mycontroladorconfiguracion.verificaexistenciaempleado(dni);
                            if (existencia == 1) {
                                empleadosexistentes.add(empleado);
                                
                                desempenosexistentes.add(mht1);
                                desempenosexistentes.add(pht1);
                                desempenosexistentes.add(mht2);
                                desempenosexistentes.add(pht2);

                                desempenosexistentes.add(mdt1);
                                desempenosexistentes.add(pdt1);
                                desempenosexistentes.add(mdt2);
                                desempenosexistentes.add(pdt2);

                                desempenosexistentes.add(mrt1);
                                desempenosexistentes.add(prt1);
                                desempenosexistentes.add(mrt2);
                                desempenosexistentes.add(prt2);

                                desempenosexistentes.add(met1);
                                desempenosexistentes.add(pet1);
                                desempenosexistentes.add(met2);
                                desempenosexistentes.add(pet2);
                            } else {
                                empleados.add(empleado);
                                
                                desempenos.add(mht1);
                                desempenos.add(pht1);
                                desempenos.add(mht2);
                                desempenos.add(pht2);

                                desempenos.add(mdt1);
                                desempenos.add(pdt1);
                                desempenos.add(mdt2);
                                desempenos.add(pdt2);

                                desempenos.add(mrt1);
                                desempenos.add(prt1);
                                desempenos.add(mrt2);
                                desempenos.add(prt2);

                                desempenos.add(met1);
                                desempenos.add(pet1);
                                desempenos.add(met2);
                                desempenos.add(pet2);
                            }
                            
//                            desempenos.add(mht1);
//                            desempenos.add(pht1);
//                            desempenos.add(mht2);
//                            desempenos.add(pht2);
//                            
//                            desempenos.add(mdt1);
//                            desempenos.add(pdt1);
//                            desempenos.add(mdt2);
//                            desempenos.add(pdt2);
//                            
//                            desempenos.add(mrt1);
//                            desempenos.add(prt1);
//                            desempenos.add(mrt2);
//                            desempenos.add(prt2);
//                            
//                            desempenos.add(met1);
//                            desempenos.add(pet1);
//                            desempenos.add(met2);
//                            desempenos.add(pet2);
                            

                            
                    }
//                    mycontroladorconfiguracion.guardaListaEmpleados(empleados,desempenos);
                    
                    if(empleados.size() > 0 && empleadosexistentes.size()==0){
                        mycontroladorconfiguracion.guardaListaEmpleados(empleados, desempenos);
                        JOptionPane.showMessageDialog(this, "Se agregaron los empleados exitosamente.");
                        lbj.LBJ.Login.escritorio.empleado.refreshEmpleadoTable();
                        this.dispose();
                    } else if (empleados.size() == 0 && empleadosexistentes.size() > 0) {
                        JOptionPane.showMessageDialog(this, "Los empleados que intenta guardar ya existen.");
                        this.dispose();
                    } else if(empleados.size() > 0 && empleadosexistentes.size()>0){
                        mycontroladorconfiguracion.guardaListaEmpleados(empleados, desempenos);
                        JOptionPane.showMessageDialog(this, "Se agregaron los empleados nuevos exitosamente. Algunos ya existian.");
                        lbj.LBJ.Login.escritorio.empleado.refreshEmpleadoTable();
                        this.dispose();
                    } else if (empleados.size() == 0 && empleadosexistentes.size() == 0) {
                        JOptionPane.showMessageDialog(this, "El archivo que intenta cargar esta vacio.");
//                        this.dispose();
                    }
//                    } else if(numFilas == 3){
//                        JOptionPane.showMessageDialog(this, "El archivo que intenta cargar esta vacio.");
//                    }
//                    else{
//                        JOptionPane.showMessageDialog(this, "Se agregaron los empleados exitosamente.");
//                        lbj.LBJ.Login.escritorio.empleado.refreshProductTable();
//                        this.dispose();
//                    }
            } 
            catch (Exception ioe) { 
                ioe.printStackTrace(); 
                JOptionPane.showMessageDialog(null, ioe);
                JOptionPane.showMessageDialog(null, "Error: En el Archivo, en la Fila " + (fila+1) + " y Columna "  + col);
            }
        }
        //FIN: Lee desde Archivo excel
    }//GEN-LAST:event_btnCargarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnCargar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField txtNombreArchivo;
    // End of variables declaration//GEN-END:variables
}
